/*
By.荼山(Tosen) 2879700093
基于大数库封装的高级大数库
游戏开发交流群：627812314
特点：
1.更多的方法：指数运算、取余、取模、取最大值、取最小值 等...
2.支持大数对比： 5>3 返回 逻辑型
3.新增指数运算：5^2  返回 大数

更新日志：
v1.06 => 2024/07/11
高级大整数：
内容() 方法新增：支持去除小数位
小数() 新增方法，支持小数转大整数
单精度小数() 新增方法，支持单精度小数转大整数
整数() 新增方法，支持整数转大整数
长整数() 新增方法，支持长整数转大整数

高级大数字：
小数() 新增方法，支持小数转大数字
单精度小数() 新增方法，支持单精度小数转大数字
整数() 新增方法，支持整数转大数字
长整数() 新增方法，支持长整数转大数字
*/

/*
大整数类，提供超大整数的计算功能
*/
@指代类("java.math.BigInteger")
类 高级大整数 : 数字
	@嵌入式代码
	@运算符重载
	方法 =(值 : 文本)
		code new java.math.BigInteger(#值);
	结束 方法

	@运算符重载
	方法 +(另一个大整数 : 高级大整数) : 高级大整数
		返回 加(另一个大整数)
	结束 方法

	@运算符重载
	方法 -(另一个大整数 : 高级大整数) : 高级大整数
		返回 减(另一个大整数)
	结束 方法

	@运算符重载
	方法 *(另一个大整数 : 高级大整数) : 高级大整数
		返回 乘(另一个大整数)
	结束 方法

	@运算符重载
	方法 /(另一个大整数 : 高级大整数) : 高级大整数
		返回 除以(另一个大整数)
	结束 方法

	@运算符重载
	方法 %(另一个大整数 : 高级大整数) : 高级大整数
		返回 取余(另一个大整数)
	结束 方法

	@运算符重载
	方法 ^(次方 : 整数) : 高级大整数
		返回 指数(次方)
	结束 方法

	@运算符重载
	方法 ==(另一个大整数 : 高级大整数) : 逻辑型
		返回 对比("==", 另一个大整数)
	结束 方法

	@运算符重载
	方法 >(另一个大整数 : 高级大整数) : 逻辑型
		返回 对比(">", 另一个大整数)
	结束 方法

	@运算符重载
	方法 <(另一个大整数 : 高级大整数) : 逻辑型
		返回 对比("<", 另一个大整数)
	结束 方法

	@运算符重载
	方法 >=(另一个大整数 : 高级大整数) : 逻辑型
		返回 对比(">=", 另一个大整数)
	结束 方法

	@运算符重载
	方法 <=(另一个大整数 : 高级大整数) : 逻辑型
		返回 对比("<=", 另一个大整数)
	结束 方法

	@嵌入式代码
	方法 新建(值:文本) : 高级大整数
		code return new java.math.BigInteger(#值);
	结束 方法

	@静态
	方法 内容(值:文本) : 高级大整数
		@code
		String integerPart = #值;
		char targetChar = '.';
		if (integerPart.contains(String.valueOf(targetChar)))
		integerPart = integerPart.substring(0, integerPart.indexOf('.')); //去除小数位
		return new java.math.BigInteger(integerPart);
		@end
	结束 方法

	@静态
	方法 小数(值:小数) : 高级大整数
		@code
		String integerPart = String.valueOf(#值);
		char targetChar = '.';
		if (integerPart.contains(String.valueOf(targetChar)))
		integerPart = integerPart.substring(0, integerPart.indexOf('.')); //去除小数位
		return new java.math.BigInteger(integerPart);
		@end
	结束 方法

	@静态
	方法 单精度小数(值:单精度小数) : 高级大整数
		@code
		String integerPart = String.valueOf(#值);
		char targetChar = '.';
		if (integerPart.contains(String.valueOf(targetChar)))
		integerPart = integerPart.substring(0, integerPart.indexOf('.')); //去除小数位
		return new java.math.BigInteger(integerPart);
		@end
	结束 方法

	@静态
	方法 整数(值:整数) : 高级大整数
		@code
		String intToStr = String.valueOf(#值);
		return new java.math.BigInteger(intToStr);
		@end
	结束 方法

	@静态
	方法 长整数(值:长整数) : 高级大整数
		@code
		String intToStr = String.valueOf(#值);
		return new java.math.BigInteger(intToStr);
		@end
	结束 方法

	方法 加(另一个大整数 : 高级大整数) : 高级大整数
		code return #this.add(#另一个大整数);
	结束 方法

	方法 减(另一个大整数 : 高级大整数) : 高级大整数
		code return #this.subtract(#另一个大整数);
	结束 方法

	方法 乘(另一个大整数 : 高级大整数) : 高级大整数
		code return #this.multiply(#另一个大整数);
	结束 方法

	方法 除以(另一个大整数 : 高级大整数) : 高级大整数
		code return #this.divide(#另一个大整数);
	结束 方法

	方法 指数(次方 : 整数) : 高级大整数
		code return #this.pow(#次方);
	结束 方法

	方法 取最大公约数(另一个大整数 : 高级大整数) : 高级大整数
		code return #this.gcd(#另一个大整数);
	结束 方法

	方法 取最大值(另一个大整数 : 高级大整数) : 高级大整数
		code return #this.max(#另一个大整数);
	结束 方法

	方法 取最小值(另一个大整数 : 高级大整数) : 高级大整数
		code return #this.min(#另一个大整数);
	结束 方法

	方法 取模(另一个大整数 : 高级大整数) : 高级大整数
		code return #this.mod(#另一个大整数);
	结束 方法

	方法 取乘法逆元(另一个大整数 : 高级大整数) : 高级大整数
		code return #this.modInverse(#另一个大整数);
	结束 方法

	方法 取按位或运算(另一个大整数 : 高级大整数) : 高级大整数
		code return #this.or(#另一个大整数);
	结束 方法

	方法 取按位异或运算(另一个大整数 : 高级大整数) : 高级大整数
		code return #this.xor(#另一个大整数);
	结束 方法

	方法 取余(另一个大整数 : 高级大整数) : 高级大整数
		code return #this.remainder(#另一个大整数);
	结束 方法

	方法 对比(对比符号:文本 = ">=", 另一个大整数 : 高级大整数) : 逻辑型
		@code 
		boolean reb = false;
		int ret = #this.compareTo(#另一个大整数);
		if(#对比符号 == "==") {
			if(ret == 0)
			reb = true;
		} else if(#对比符号 == "<=") {
			if(ret <= 0)
			reb = true;
		} else if(#对比符号 == ">=") {
			if(ret >= 0)
			reb = true;
		} else if(#对比符号 == "<") {
			if(ret < 0)
			reb = true;
		} else if(#对比符号 == ">") {
			if(ret > 0)
			reb = true;
		}
		return reb;
		@end
	结束 方法

	方法 到字节集() : 字节[]
		code return #this.toByteArray();
	结束 方法

	方法 到文本() : 文本
		code return #this.toString();
	结束 方法
结束 类






/*
大数字类，提供超大数字的计算功能
*/
@导入Java("java.math.RoundingMode")
@指代类("java.math.BigDecimal")
类 高级大数字 : 数字
	@嵌入式代码
	@运算符重载
	方法 =(值 : 文本)
		code new java.math.BigDecimal(#值);
	结束 方法

	@运算符重载
	方法 +(另一个大数字 : 高级大数字) : 高级大数字
		返回 加(另一个大数字)
	结束 方法

	@运算符重载
	方法 -(另一个大数字 : 高级大数字) : 高级大数字
		返回 减(另一个大数字)
	结束 方法

	@运算符重载
	方法 *(另一个大数字 : 高级大数字) : 高级大数字
		返回 乘(另一个大数字)
	结束 方法

	@运算符重载
	方法 /(另一个大数字 : 高级大数字) : 高级大数字
		返回 除以(另一个大数字)
	结束 方法

	@运算符重载
	方法 %(另一个大数字 : 高级大数字) : 高级大数字
		返回 取余(另一个大数字)
	结束 方法

	@运算符重载
	方法 ^(次方 : 整数) : 高级大数字
		返回 指数(次方)
	结束 方法

	@运算符重载
	方法 ==(另一个大数字 : 高级大数字) : 逻辑型
		返回 对比("==", 另一个大数字)
	结束 方法

	@运算符重载
	方法 >(另一个大数字 : 高级大数字) : 逻辑型
		返回 对比(">", 另一个大数字)
	结束 方法

	@运算符重载
	方法 <(另一个大数字 : 高级大数字) : 逻辑型
		返回 对比("<", 另一个大数字)
	结束 方法

	@运算符重载
	方法 >=(另一个大数字 : 高级大数字) : 逻辑型
		返回 对比(">=", 另一个大数字)
	结束 方法

	@运算符重载
	方法 <=(另一个大数字 : 高级大数字) : 逻辑型
		返回 对比("<=", 另一个大数字)
	结束 方法

	@嵌入式代码
	方法 新建(值:文本) : 高级大数字
		code return new java.math.BigDecimal(#值);
	结束 方法

	@静态
	方法 内容(值:文本) : 高级大数字
		code return new java.math.BigDecimal(#值);
	结束 方法

	@静态
	方法 小数(值:小数) : 高级大数字
		code return new java.math.BigDecimal(String.valueOf(#值));
	结束 方法

	@静态
	方法 单精度小数(值:单精度小数) : 高级大数字
		code return new java.math.BigDecimal(String.valueOf(#值));
	结束 方法

	@静态
	方法 整数(值:整数) : 高级大数字
		code return new java.math.BigDecimal(String.valueOf(#值));
	结束 方法

	@静态
	方法 长整数(值:长整数) : 高级大数字
		code return new java.math.BigDecimal(String.valueOf(#值));
	结束 方法

	方法 加(另一个大数字 : 高级大数字) : 高级大数字
		code return #this.add(#另一个大数字);
	结束 方法

	方法 减(另一个大数字 : 高级大数字) : 高级大数字
		code return #this.subtract(#另一个大数字);
	结束 方法

	方法 乘(另一个大数字 : 高级大数字) : 高级大数字
		code return #this.multiply(#另一个大数字);
	结束 方法

	//默认保留两位小数，向上取整
	方法 除以(另一个大数字 : 高级大数字, 保留小数位:整数=2) : 高级大数字
		code return #this.divide(#另一个大数字, #保留小数位, RoundingMode.HALF_UP);
	结束 方法

	方法 指数(次方 : 整数) : 高级大数字
		code return #this.pow(#次方);
	结束 方法

	方法 取最大公约数(另一个大数字 : 高级大数字) : 高级大数字
		code return #this.gcd(#另一个大数字);
	结束 方法

	方法 取最大值(另一个大数字 : 高级大数字) : 高级大数字
		code return #this.max(#另一个大数字);
	结束 方法

	方法 取最小值(另一个大数字 : 高级大数字) : 高级大数字
		code return #this.min(#另一个大数字);
	结束 方法

	方法 取模(另一个大数字 : 高级大数字) : 高级大数字
		code return #this.mod(#另一个大数字);
	结束 方法

	方法 取乘法逆元(另一个大数字 : 高级大数字) : 高级大数字
		code return #this.modInverse(#另一个大数字);
	结束 方法

	方法 取按位或运算(另一个大数字 : 高级大数字) : 高级大数字
		code return #this.or(#另一个大数字);
	结束 方法

	方法 取按位异或运算(另一个大数字 : 高级大数字) : 高级大数字
		code return #this.xor(#另一个大数字);
	结束 方法

	方法 取余(另一个大数字 : 高级大数字) : 高级大数字
		code return #this.remainder(#另一个大数字);
	结束 方法

	方法 保留小数位(小数位数 : 整数=2) : 高级大数字
		code return #this.setScale(#小数位数, RoundingMode.HALF_UP);
	结束 方法

	方法 对比(对比符号:文本 = ">=", 另一个大数字 : 高级大数字) : 逻辑型
		@code 
		boolean reb = false;
		int ret = #this.compareTo(#另一个大数字);
		if(#对比符号 == "==") {
			if(ret == 0)
			reb = true;
		} else if(#对比符号 == "<=") {
			if(ret <= 0)
			reb = true;
		} else if(#对比符号 == ">=") {
			if(ret >= 0)
			reb = true;
		} else if(#对比符号 == "<") {
			if(ret < 0)
			reb = true;
		} else if(#对比符号 == ">") {
			if(ret > 0)
			reb = true;
		}
		return reb;
		@end
	结束 方法

	方法 到字节集() : 字节[]
		code return #this.toByteArray();
	结束 方法

	方法 到文本() : 文本
		code return #this.toString();
	结束 方法
结束 类